#ifndef __POWERMANAGER_H__
#define __POWERMANAGER_H__

#include "import.h"


/**
 * 电源管理
 * 
 * 状态循环:
 * Normal时正常运行
 * 
 * 当主循环发现运行模式变更为PrepareSleep时，表示准备进入睡眠模式（由按钮引发）
 * 主循环调用进入休眠模式的函数。同时运行模式变更为Sleep
 * 
 * 当收到外部中断时，中断函数判断系统模式，正常模式时正常处理
 *  Sleep模式时立即转为Waking模式，并且中断函数立即返回
 * 
 * 主循环完成时钟恢复后，变更为正常模式。
 * 在Waking模式时，主循环不进行任何工作
 * 
 **/


typedef void (*PMCallback)(void);


//设置休眠前执行的函数指针
void PM_Set_Before_Sleep_Callback(PMCallback callback);

//设置唤醒后执行的函数指针
void PM_Set_After_Wakeup_Callback(PMCallback callback);


//准备进入睡眠模式
void PM_PrepareToSleep_int(void);


//外部中断函数处理,当返回TRUE时，中断函数必需立即返回
//本函数必需在EXTI_ClearITPendingBit后执行，否则系统反复引发中断导致异常
BOOL PM_EXTIHandle_int(void);



//主循环调用函数，当返回TRUE时主循环必需直接返回(return)
BOOL PM_Working_loop(void);



#endif
